package com.example.usercenter.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

/**
 * Spring Session 中 HTTP 会话 ID 相关的 Cookie 设置
 */
@Configuration
public class SpringSessionConfig {

    @Bean
    public CookieSerializer httpSessionIdResolver(){
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        //  Spring Session 中用于序列化和处理 HTTP 会话 ID 的 Cookie 的默认实现。
        defaultCookieSerializer.setUseHttpOnlyCookie(false);
        //  设置 HTTP 会话 Cookie 是否具有 HttpOnly 属性。HttpOnly 属性用于防止客户端脚本（如 JavaScript）访问 Cookie，
        //  这样可以防止跨站脚本攻击（XSS）。这里设置为 false，意味着允许客户端脚本访问该 Cookie
        defaultCookieSerializer.setSameSite("None");
        //  setSameSite("None")：设置 SameSite 属性，用于控制跨站请求时 Cookie 的发送行为
        //  None：在任何情况下都发送 Cookie。这个值通常与 Secure 属性配合使用，确保 Cookie 在跨站请求中仍然安全发送
        defaultCookieSerializer.setCookiePath("/api");
        //  设置 Cookie 的路径。只有在指定路径下的请求才能发送该 Cookie。此处设置为 /api，意味着只有访问 /api
        defaultCookieSerializer.setUseSecureCookie(true);
        //  ：设置 Cookie 是否只在 HTTPS 协议下发送。true 表示 Cookie 只能通过安全的 HTTPS 连接发送，从而增强安全性，防止通过不安全的 HTTP 连接泄露 Cookie
        return defaultCookieSerializer;
    }

}
